summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFernando S <fsahmkow27@gmail.com>2022-10-22 13:06:03 +0200
committerGitHub <noreply@github.com>2022-10-22 13:06:03 +0200
commit0860fffd78e5c0a833bd0285d651a4615d29c4f4 (patch)
treeb9a87dee479da5e0bffbfd29f762c1bbde56c3af
parentMerge pull request #9106 from lioncash/copy-err (diff)
parentMaxwell3D/Puller: Fix regressions and syncing issues. (diff)
downloadyuzu-0860fffd78e5c0a833bd0285d651a4615d29c4f4.tar
yuzu-0860fffd78e5c0a833bd0285d651a4615d29c4f4.tar.gz
yuzu-0860fffd78e5c0a833bd0285d651a4615d29c4f4.tar.bz2
yuzu-0860fffd78e5c0a833bd0285d651a4615d29c4f4.tar.lz
yuzu-0860fffd78e5c0a833bd0285d651a4615d29c4f4.tar.xz
yuzu-0860fffd78e5c0a833bd0285d651a4615d29c4f4.tar.zst
yuzu-0860fffd78e5c0a833bd0285d651a4615d29c4f4.zip
-rw-r--r--src/video_core/engines/maxwell_3d.cpp17
-rw-r--r--src/video_core/engines/puller.cpp5
2 files changed, 9 insertions, 13 deletions
diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp
index 89a9d1f5a..b1a22b76c 100644
--- a/src/video_core/engines/maxwell_3d.cpp
+++ b/src/video_core/engines/maxwell_3d.cpp
@@ -473,9 +473,7 @@ void Maxwell3D::ProcessQueryGet() {
switch (regs.report_semaphore.query.operation) {
case Regs::ReportSemaphore::Operation::Release:
- if (regs.report_semaphore.query.release ==
- Regs::ReportSemaphore::Release::AfterAllPreceedingWrites ||
- regs.report_semaphore.query.short_query != 0) {
+ if (regs.report_semaphore.query.short_query != 0) {
const GPUVAddr sequence_address{regs.report_semaphore.Address()};
const u32 payload = regs.report_semaphore.payload;
std::function<void()> operation([this, sequence_address, payload] {
@@ -489,11 +487,10 @@ void Maxwell3D::ProcessQueryGet() {
};
const GPUVAddr sequence_address{regs.report_semaphore.Address()};
const u32 payload = regs.report_semaphore.payload;
- std::function<void()> operation([this, sequence_address, payload] {
+ [this, sequence_address, payload] {
memory_manager.Write<u64>(sequence_address + sizeof(u64), system.GPU().GetTicks());
memory_manager.Write<u64>(sequence_address, payload);
- });
- rasterizer->SyncOperation(std::move(operation));
+ }();
}
break;
case Regs::ReportSemaphore::Operation::Acquire:
@@ -569,11 +566,11 @@ void Maxwell3D::ProcessCounterReset() {
void Maxwell3D::ProcessSyncPoint() {
const u32 sync_point = regs.sync_info.sync_point.Value();
- const auto condition = regs.sync_info.condition.Value();
- [[maybe_unused]] const u32 cache_flush = regs.sync_info.clean_l2.Value();
- if (condition == Regs::SyncInfo::Condition::RopWritesDone) {
- rasterizer->SignalSyncPoint(sync_point);
+ const u32 cache_flush = regs.sync_info.clean_l2.Value();
+ if (cache_flush != 0) {
+ rasterizer->InvalidateGPUCache();
}
+ rasterizer->SignalSyncPoint(sync_point);
}
void Maxwell3D::DrawArrays() {
diff --git a/src/video_core/engines/puller.cpp b/src/video_core/engines/puller.cpp
index cca890792..3977bb0fb 100644
--- a/src/video_core/engines/puller.cpp
+++ b/src/video_core/engines/puller.cpp
@@ -75,11 +75,10 @@ void Puller::ProcessSemaphoreTriggerMethod() {
if (op == GpuSemaphoreOperation::WriteLong) {
const GPUVAddr sequence_address{regs.semaphore_address.SemaphoreAddress()};
const u32 payload = regs.semaphore_sequence;
- std::function<void()> operation([this, sequence_address, payload] {
+ [this, sequence_address, payload] {
memory_manager.Write<u64>(sequence_address + sizeof(u64), gpu.GetTicks());
memory_manager.Write<u64>(sequence_address, payload);
- });
- rasterizer->SignalFence(std::move(operation));
+ }();
} else {
do {
const u32 word{memory_manager.Read<u32>(regs.semaphore_address.SemaphoreAddress())};